function TrFilter(fromCookie) {

	var self = this;
	this.incomesFilter = new BoolFilter('trFilterIncomes', fromCookie);
	this.outcomesFilter = new BoolFilter('trFilterOutcomes', fromCookie);
	this.transfersFilter = new BoolFilter('trFilterTransfers', fromCookie);
	this.dateFrom = new DateFilter('trFilterDateFrom');
	this.dateTo = new DateFilter('trFilterDateTo');
	if(fromCookie) {
		this.dateFrom.readCookie();
		this.dateTo.readCookie();
	}
	this.accountsFilter = new AccountsFilter(fromCookie);
	this.categoriesFilter = new CategoriesFilter(fromCookie);
	this.tagsFilter = new TagsFilter(fromCookie);

	$(this.incomesFilter).on('change', function() { $(self).trigger('change'); });
	$(this.outcomesFilter).on('change', function() { $(self).trigger('change'); });
	$(this.transfersFilter).on('change', function() { $(self).trigger('change'); });
	$(this.dateFrom).on('change', function() { $(self).trigger('change'); });
	$(this.dateTo).on('change', function() { $(self).trigger('change'); });
	$(this.accountsFilter).on('change', function() { $(self).trigger('change'); });
	$(this.categoriesFilter).on('change', function() { $(self).trigger('change'); });
	$(this.tagsFilter).on('change', function() { $(self).trigger('change'); });

	this.getValue = function() {
		return {
			incomes: this.incomesFilter.value,
			outcomes: this.outcomesFilter.value,
			transfers: this.transfersFilter.value,
			dateFrom: this.dateFrom.date,
			dateTo: this.dateTo.date,
			accounts: this.accountsFilter.getValue(),
			categories: this.categoriesFilter.getValue(),
			tags: this.tagsFilter.getValue()
		};
	};
};